using System.Collections.Generic;
using Infinity.Common.Logger;
using Infinity.Expressions.Utilities;
using Infinity.Statements.Utilities;

namespace Infinity.Compilers
{
	public interface ICompiler
	{
		ITypeManager TypeManager { get; set; }
		ICastManager CastManager { get; set; }
		IScopeManager ScopeManager { get; set; }
		ILogger Logger { get; }

		/// <summary>
		/// It returns errors of parser
		/// </summary>
		List<string> Errors { get; }

		/// <summary>
		/// It compiles the current source code
		/// </summary>
		bool Compile(string source);
	}
}